#ifndef CSQLTREEMODEL_H
#define CSQLTREEMODEL_H

#include <QSqlQueryModel>
#include <QVector>

/* - - - - - - - - -
  | Структура для збереження інф.
  |  про конкретний запис
  |- - - - - - - - - */
class AlbumRecord : public QObject
{
    Q_OBJECT
public:
    AlbumRecord();
    AlbumRecord(const AlbumRecord &a);
    ~AlbumRecord();
    bool operator==(const AlbumRecord &a);
    AlbumRecord& operator=(const AlbumRecord &a);
    //bool operator<(const AlbumRecord &a);

    bool isParent;
    int uniqId, styleId;
    QString caption, comment;
};

Q_DECLARE_METATYPE( AlbumRecord )

class CSqlTreeModel : public QSqlQueryModel
{
    Q_OBJECT
public:
    explicit CSqlTreeModel(QObject *parent = 0);

    bool insertRows(int position, int rows, const QModelIndex &index/*=QModelIndex()*/);
    bool removeRows(int position, int rows, const QModelIndex &index);
    int rowCount(const QModelIndex &parent=QModelIndex()) const;
    int columnCount(const QModelIndex &parent) const;
    QVariant data(const QModelIndex &item, int role) const;
    bool setData(const QModelIndex &index, const QVariant &value, int role);
    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
    Qt::ItemFlags flags(const QModelIndex &index) const;

    bool initParents(QSqlDatabase db);

private:
    // всі бaтьківські елементи
    QMap<int, QModelIndex> m_parents;
    // всі записи
    QVector<AlbumRecord> m_allRecords;

signals:
public slots:
};

#endif // CSQLTREEMODEL_H
